package com.lagou.niancheng.core.session;

import java.lang.reflect.Type;
import java.util.List;

public interface SqlSession {


    /**
     * 执行语句
     *
     * @param statementId       语句id
     * @param params            参数
     * @param genericReturnType 返回值类型
     * @return 返回结果
     * @throws Exception
     */
    Object executeStatement(Type genericReturnType, String statementId, Object... params) throws Exception;

    /**
     * 查询所有
     *
     * @param params      参数
     * @param statementId 语句id
     */
    <E> List<E> selectList(String statementId, Object... params) throws Exception;

    /**
     * 根据条件查询单个
     *
     * @param params      参数
     * @param statementId 语句id
     */
    <T> T selectOne(String statementId, Object... params) throws Exception;


    /**
     * 事务提交
     */
    void commit();

    /**
     * 事务回滚
     */
    void rollback();

    /**
     * 更新操作
     *
     * @param statementId 语句id
     * @param params      参数
     */
    void update(String statementId, Object... params) throws Exception;

    /**
     * 插入操作
     *
     * @param statementId 语句id
     * @param params      参数
     */
    void insert(String statementId, Object... params) throws Exception;

    /**
     * 删除操作
     *
     * @param statementId 语句id
     * @param params      参数
     */
    void delete(String statementId, Object... params) throws Exception;

    /**
     * 为Dao接口生成代理实现类
     *
     * @param mapperClass mapper接口类型
     */
    <T> T getMapper(Class<?> mapperClass);


}
